use anyhow::Context;
use pathfinder_common::casm_class::CasmContractClass;
use pathfinder_common::ClassHash;

use crate::context::RpcContext;
use crate::error::ApplicationError;

#[derive(Debug)]
pub struct Input {
    pub class_hash: ClassHash,
}

impl crate::dto::DeserializeForVersion for Input {
    fn deserialize(value: crate::dto::Value) -> Result<Self, serde_json::Error> {
        value.deserialize_map(|value| {
            Ok(Self {
                class_hash: ClassHash(value.deserialize("class_hash")?),
            })
        })
    }
}

#[derive(Debug)]
pub struct Output(CasmContractClass);

impl crate::dto::serialize::SerializeForVersion for Output {
    fn serialize(
        &self,
        serializer: crate::dto::serialize::Serializer,
    ) -> Result<crate::dto::serialize::Ok, crate::dto::serialize::Error> {
        self.0.serialize(serializer)
    }
}

#[derive(Debug)]
pub enum Error {
    CompilationFailed,
    ClassHashNotFound(ClassHash),
    Internal(anyhow::Error),
}

impl From<anyhow::Error> for Error {
    fn from(error: anyhow::Error) -> Self {
        Self::Internal(error)
    }
}

impl From<Error> for crate::jsonrpc::RpcError {
    fn from(error: Error) -> Self {
        match error {
            Error::CompilationFailed => Self::ApplicationError(ApplicationError::CompilationFailed),
            Error::ClassHashNotFound(_) => {
                Self::ApplicationError(ApplicationError::ClassHashNotFound)
            }
            Error::Internal(e) => Self::InternalError(e),
        }
    }
}

/// Get the compiled casm for a given class hash.
pub async fn get_compiled_casm(context: RpcContext, input: Input) -> Result<Output, Error> {
    let span = tracing::Span::current();
    let jh = tokio::task::spawn_blocking(move || -> Result<Output, Error> {
        let _g = span.enter();

        let mut db = context
            .storage
            .connection()
            .context("Opening database connection")
            .map_err(Error::Internal)?;

        let tx = db
            .transaction()
            .context("Creating database transaction")
            .map_err(Error::Internal)?;

        // Get the class definition
        let casm_definition = tx
            .casm_definition(input.class_hash)
            .context("Fetching class definition")
            .map_err(Error::Internal)?
            .ok_or(Error::ClassHashNotFound(input.class_hash))?;

        // Convert to JSON string
        let casm_definition_str = String::from_utf8_lossy(&casm_definition);

        // Parse the casm definition
        let casm_contract_class = CasmContractClass::try_from(casm_definition_str.as_ref())
            .context("Parsing casm definition")
            .map_err(|_| Error::Internal(anyhow::anyhow!("Failed to parse casm definition")))?;

        Ok(Output(casm_contract_class))
    });

    jh.await.context("Fetching compiled casm")?
}

#[cfg(test)]
mod tests {

    use pathfinder_common::casm_class::{
        BigUintAsHex,
        CasmContractEntryPoint,
        CasmContractEntryPoints,
    };
    use pathfinder_common::{casm_hash, class_hash, felt, sierra_hash, EntryPoint};
    use serde_json::json;
    use starknet_gateway_test_fixtures::class_definitions::{
        CAIRO_1_1_0_BALANCE_CASM_JSON,
        CAIRO_1_1_0_BALANCE_SIERRA_JSON,
    };
    use tempfile::tempdir;

    use super::*;

    /// Test the happy path.
    #[tokio::test]
    async fn test_get_casm_success() {
        let rpc = setup().await.expect("RPC context");

        let result = get_compiled_casm(rpc.clone(), input())
            .await
            .expect("result");
        assert_eq!(result.0, expected());
    }

    /// Test the failure path.
    #[tokio::test]
    async fn test_get_casm_failure() {
        let rpc = setup().await.expect("RPC context");

        let result = get_compiled_casm(rpc, input_not_found())
            .await
            .expect_err("result");
        assert_matches::assert_matches!(result, Error::ClassHashNotFound(_));
    }

    async fn setup() -> anyhow::Result<RpcContext> {
        let dir = tempdir().expect("tempdir");
        let mut db_path = dir.path().to_path_buf();
        db_path.push("db.sqlite");

        let storage = pathfinder_storage::StorageBuilder::in_memory().unwrap();

        {
            let mut db = storage.connection().expect("db connection");
            let tx = db.transaction().expect("tx");

            tx.insert_sierra_class(
                &sierra_hash!("0x0484c163658bcce5f9916f486171ac60143a92897533aa7ff7ac800b16c63311"),
                CAIRO_1_1_0_BALANCE_SIERRA_JSON,
                &casm_hash!("0x0484c163658bcce5f9916f486171ac60143a92897533aa7ff7ac800b16c63311"),
                CAIRO_1_1_0_BALANCE_CASM_JSON,
            )
            .expect("insert class");

            tx.commit().unwrap();
        }

        let rpc = RpcContext::for_tests().with_storage(storage);

        Ok(rpc)
    }

    fn input() -> Input {
        Input {
            class_hash: class_hash!(
                "0x0484c163658bcce5f9916f486171ac60143a92897533aa7ff7ac800b16c63311"
            ),
        }
    }

    fn input_not_found() -> Input {
        Input {
            class_hash: class_hash!(
                "0x0000c163658bcce5f9916f486171ac60143000897533aa7ff7ac800b16c63000"
            ),
        }
    }

    fn expected() -> CasmContractClass {
        // Expected entry points
        let entry_points_by_type = CasmContractEntryPoints {
            external: vec![
                CasmContractEntryPoint {
                    selector: EntryPoint(felt!(
                        "0x0362398BEC32BC0EBB411203221A35A0301193A96F317EBE5E40BE9F60D15320"
                    )),
                    offset: 0,
                    builtins: vec!["range_check".to_string()],
                },
                CasmContractEntryPoint {
                    selector: EntryPoint(felt!(
                        "0x039E11D48192E4333233C7EB19D10AD67C362BB28580C604D67884C85DA39695"
                    )),
                    offset: 141,
                    builtins: vec!["range_check".to_string()],
                },
            ],
            l1_handler: vec![CasmContractEntryPoint {
                selector: EntryPoint(felt!(
                    "0x031EE153A27E249DC4BADE6B861B37EF1E1EA0A4C0BF73B7405A02E9E72F7BE3"
                )),
                offset: 266,
                builtins: vec!["range_check".to_string()],
            }],
            constructor: vec![CasmContractEntryPoint {
                selector: EntryPoint(felt!(
                    "0x028FFE4FF0F226A9107253E17A904099AA4F63A02A5621DE0576E5AA71BC5194"
                )),
                offset: 428,
                builtins: vec!["range_check".to_string()],
            }],
        };

        // Expected bytecode
        let bytecode = vec![
            felt!("0x0000000000000000000000000000000000000000000000000A0680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000007"),
            felt!("0x000000000000000000000000000000000000000000000000482680017FFA8000"),
            felt!("0x00000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFA7EA"),
            felt!("0x000000000000000000000000000000000000000000000000400280007FF97FFF"),
            felt!("0x000000000000000000000000000000000000000000000000010780017FFF7FFF"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000079"),
            felt!("0x0000000000000000000000000000000000000000000000004825800180007FFA"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000005816"),
            felt!("0x000000000000000000000000000000000000000000000000400280007FF97FFF"),
            felt!("0x000000000000000000000000000000000000000000000000480A7FFC7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000480A7FFD7FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000001104800180018000"),
            felt!("0x000000000000000000000000000000000000000000000000000000000000022D"),
            felt!("0x000000000000000000000000000000000000000000000000482680017FF98000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x000000000000000000000000000000000000000000000000020680017FFF7FFD"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000060"),
            felt!("0x00000000000000000000000000000000000000000000000048307FFB80007FFC"),
            felt!("0x0000000000000000000000000000000000000000000000004824800180007FFF"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000000"),
            felt!("0x000000000000000000000000000000000000000000000000020680017FFF7FFF"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000004"),
            felt!("0x000000000000000000000000000000000000000000000000010780017FFF7FFF"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000006"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000000"),
            felt!("0x000000000000000000000000000000000000000000000000010780017FFF7FFF"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000004"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x00000000000000000000000000000000000000000000000048307FFE80007FFF"),
            felt!("0x000000000000000000000000000000000000000000000000020680017FFF7FFF"),
            felt!("0x000000000000000000000000000000000000000000000000000000000000003D"),
            felt!("0x0000000000000000000000000000000000000000000000001104800180018000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000326"),
            felt!("0x000000000000000000000000000000000000000000000000482480017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000325"),
            felt!("0x000000000000000000000000000000000000000000000000480080007FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000A0680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000009"),
            felt!("0x0000000000000000000000000000000000000000000000004824800180007FE4"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000000"),
            felt!("0x000000000000000000000000000000000000000000000000482480017FFF8000"),
            felt!("0x0000000000000000000000000000000100000000000000000000000000000000"),
            felt!("0x000000000000000000000000000000000000000000000000400080007FF37FFF"),
            felt!("0x000000000000000000000000000000000000000000000000010780017FFF7FFF"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000020"),
            felt!("0x0000000000000000000000000000000000000000000000004824800180007FE4"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000000"),
            felt!("0x000000000000000000000000000000000000000000000000400080007FF47FFF"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFF7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000480A7FFB7FFF8000"),
            felt!("0x00000000000000000000000000000000000000000000000048127FF17FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000001104800180018000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000228"),
            felt!("0x000000000000000000000000000000000000000000000000482480017FBB8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x000000000000000000000000000000000000000000000000020680017FFF7FFC"),
            felt!("0x000000000000000000000000000000000000000000000000000000000000000C"),
            felt!("0x000000000000000000000000000000000000000000000000040780017FFF7FFF"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFE7FFF8000"),
            felt!("0x00000000000000000000000000000000000000000000000048127FF87FFF8000"),
            felt!("0x00000000000000000000000000000000000000000000000048127FF87FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000000"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFB7FFF8000"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFA7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000208B7FFF7FFF7FFE"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFF7FFF8000"),
            felt!("0x00000000000000000000000000000000000000000000000048127FF97FFF8000"),
            felt!("0x00000000000000000000000000000000000000000000000048127FF97FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x00000000000000000000000000000000000000000000000048127FF97FFF8000"),
            felt!("0x00000000000000000000000000000000000000000000000048127FF97FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000208B7FFF7FFF7FFE"),
            felt!("0x000000000000000000000000000000000000000000000000040780017FFF7FFF"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x000000000000000000000000000000000000000000004F7574206F6620676173"),
            felt!("0x000000000000000000000000000000000000000000000000400080007FFE7FFF"),
            felt!("0x000000000000000000000000000000000000000000000000482480017FF18000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x00000000000000000000000000000000000000000000000048127FDF7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000480A7FFB7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFA7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000482480017FF98000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x000000000000000000000000000000000000000000000000208B7FFF7FFF7FFE"),
            felt!("0x000000000000000000000000000000000000000000000000480A7FFB7FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000001104800180018000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000226"),
            felt!("0x000000000000000000000000000000000000000000000000040780017FFF7FFF"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x00000000496E70757420746F6F206C6F6E6720666F7220617267756D656E7473"),
            felt!("0x000000000000000000000000000000000000000000000000400080007FFE7FFF"),
            felt!("0x00000000000000000000000000000000000000000000000048127FF47FFF8000"),
            felt!("0x00000000000000000000000000000000000000000000000048127FE27FFF8000"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFB7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFA7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000482480017FF98000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x000000000000000000000000000000000000000000000000208B7FFF7FFF7FFE"),
            felt!("0x000000000000000000000000000000000000000000000000040780017FFF7FFF"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x000000496E70757420746F6F2073686F727420666F7220617267756D656E7473"),
            felt!("0x000000000000000000000000000000000000000000000000400080007FFE7FFF"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFD7FFF8000"),
            felt!("0x00000000000000000000000000000000000000000000000048127FEB7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000480A7FFB7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFA7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000482480017FF98000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x000000000000000000000000000000000000000000000000208B7FFF7FFF7FFE"),
            felt!("0x000000000000000000000000000000000000000000000000040780017FFF7FFF"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x000000000000000000000000000000000000000000004F7574206F6620676173"),
            felt!("0x000000000000000000000000000000000000000000000000400080007FFE7FFF"),
            felt!("0x000000000000000000000000000000000000000000000000482680017FF98000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x000000000000000000000000000000000000000000000000480A7FFA7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000480A7FFB7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFA7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000482480017FF98000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x000000000000000000000000000000000000000000000000208B7FFF7FFF7FFE"),
            felt!("0x0000000000000000000000000000000000000000000000000A0680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000007"),
            felt!("0x000000000000000000000000000000000000000000000000482680017FFA8000"),
            felt!("0x00000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFE548"),
            felt!("0x000000000000000000000000000000000000000000000000400280007FF97FFF"),
            felt!("0x000000000000000000000000000000000000000000000000010780017FFF7FFF"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000069"),
            felt!("0x0000000000000000000000000000000000000000000000004825800180007FFA"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000001AB8"),
            felt!("0x000000000000000000000000000000000000000000000000400280007FF97FFF"),
            felt!("0x00000000000000000000000000000000000000000000000048297FFC80007FFD"),
            felt!("0x000000000000000000000000000000000000000000000000482680017FF98000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x0000000000000000000000000000000000000000000000004824800180007FFE"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000000"),
            felt!("0x000000000000000000000000000000000000000000000000020680017FFF7FFF"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000004"),
            felt!("0x000000000000000000000000000000000000000000000000010780017FFF7FFF"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000006"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000000"),
            felt!("0x000000000000000000000000000000000000000000000000010780017FFF7FFF"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000004"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x00000000000000000000000000000000000000000000000048307FFE80007FFF"),
            felt!("0x000000000000000000000000000000000000000000000000020680017FFF7FFF"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000041"),
            felt!("0x0000000000000000000000000000000000000000000000001104800180018000"),
            felt!("0x000000000000000000000000000000000000000000000000000000000000029F"),
            felt!("0x000000000000000000000000000000000000000000000000482480017FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000000000000000029E"),
            felt!("0x000000000000000000000000000000000000000000000000480080007FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000A0680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000009"),
            felt!("0x0000000000000000000000000000000000000000000000004824800180007FF4"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000000"),
            felt!("0x000000000000000000000000000000000000000000000000482480017FFF8000"),
            felt!("0x0000000000000000000000000000000100000000000000000000000000000000"),
            felt!("0x000000000000000000000000000000000000000000000000400080007FF47FFF"),
            felt!("0x000000000000000000000000000000000000000000000000010780017FFF7FFF"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000024"),
            felt!("0x0000000000000000000000000000000000000000000000004824800180007FF4"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000000"),
            felt!("0x000000000000000000000000000000000000000000000000400080007FF57FFF"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFF7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000480A7FFB7FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000001104800180018000"),
            felt!("0x00000000000000000000000000000000000000000000000000000000000001CA"),
            felt!("0x000000000000000000000000000000000000000000000000482480017FDE8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x000000000000000000000000000000000000000000000000020680017FFF7FFC"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000011"),
            felt!("0x000000000000000000000000000000000000000000000000040780017FFF7FFF"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFD7FFF8000"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFE7FFF8000"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFD7FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000001104800180018000"),
            felt!("0x00000000000000000000000000000000000000000000000000000000000001F0"),
            felt!("0x00000000000000000000000000000000000000000000000048127FF77FFF8000"),
            felt!("0x00000000000000000000000000000000000000000000000048127FF17FFF8000"),
            felt!("0x00000000000000000000000000000000000000000000000048127FF17FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000000"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFA7FFF8000"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFA7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000208B7FFF7FFF7FFE"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFF7FFF8000"),
            felt!("0x00000000000000000000000000000000000000000000000048127FF97FFF8000"),
            felt!("0x00000000000000000000000000000000000000000000000048127FF97FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x00000000000000000000000000000000000000000000000048127FF97FFF8000"),
            felt!("0x00000000000000000000000000000000000000000000000048127FF97FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000208B7FFF7FFF7FFE"),
            felt!("0x000000000000000000000000000000000000000000000000040780017FFF7FFF"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x000000000000000000000000000000000000000000004F7574206F6620676173"),
            felt!("0x000000000000000000000000000000000000000000000000400080007FFE7FFF"),
            felt!("0x000000000000000000000000000000000000000000000000482480017FF28000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x00000000000000000000000000000000000000000000000048127FEF7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000480A7FFB7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFA7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000482480017FF98000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x000000000000000000000000000000000000000000000000208B7FFF7FFF7FFE"),
            felt!("0x000000000000000000000000000000000000000000000000480A7FFB7FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000001104800180018000"),
            felt!("0x000000000000000000000000000000000000000000000000000000000000019B"),
            felt!("0x000000000000000000000000000000000000000000000000040780017FFF7FFF"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x00000000496E70757420746F6F206C6F6E6720666F7220617267756D656E7473"),
            felt!("0x000000000000000000000000000000000000000000000000400080007FFE7FFF"),
            felt!("0x00000000000000000000000000000000000000000000000048127FF57FFF8000"),
            felt!("0x00000000000000000000000000000000000000000000000048127FF27FFF8000"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFB7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFA7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000482480017FF98000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x000000000000000000000000000000000000000000000000208B7FFF7FFF7FFE"),
            felt!("0x000000000000000000000000000000000000000000000000040780017FFF7FFF"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x000000000000000000000000000000000000000000004F7574206F6620676173"),
            felt!("0x000000000000000000000000000000000000000000000000400080007FFE7FFF"),
            felt!("0x000000000000000000000000000000000000000000000000482680017FF98000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x000000000000000000000000000000000000000000000000480A7FFA7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000480A7FFB7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFA7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000482480017FF98000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x000000000000000000000000000000000000000000000000208B7FFF7FFF7FFE"),
            felt!("0x0000000000000000000000000000000000000000000000000A0680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000007"),
            felt!("0x000000000000000000000000000000000000000000000000482680017FFA8000"),
            felt!("0x00000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFF9FAC"),
            felt!("0x000000000000000000000000000000000000000000000000400280007FF97FFF"),
            felt!("0x000000000000000000000000000000000000000000000000010780017FFF7FFF"),
            felt!("0x000000000000000000000000000000000000000000000000000000000000008E"),
            felt!("0x0000000000000000000000000000000000000000000000004825800180007FFA"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000006054"),
            felt!("0x000000000000000000000000000000000000000000000000400280007FF97FFF"),
            felt!("0x000000000000000000000000000000000000000000000000480A7FFC7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000480A7FFD7FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000001104800180018000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000123"),
            felt!("0x000000000000000000000000000000000000000000000000482680017FF98000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x000000000000000000000000000000000000000000000000020680017FFF7FFD"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000075"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFB7FFF8000"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFB7FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000001104800180018000"),
            felt!("0x000000000000000000000000000000000000000000000000000000000000011B"),
            felt!("0x000000000000000000000000000000000000000000000000020680017FFF7FFE"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000061"),
            felt!("0x00000000000000000000000000000000000000000000000048307FFC80007FFD"),
            felt!("0x0000000000000000000000000000000000000000000000004824800180007FFF"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000000"),
            felt!("0x000000000000000000000000000000000000000000000000020680017FFF7FFF"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000004"),
            felt!("0x000000000000000000000000000000000000000000000000010780017FFF7FFF"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000006"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000000"),
            felt!("0x000000000000000000000000000000000000000000000000010780017FFF7FFF"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000004"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x00000000000000000000000000000000000000000000000048307FFE80007FFF"),
            felt!("0x000000000000000000000000000000000000000000000000020680017FFF7FFF"),
            felt!("0x000000000000000000000000000000000000000000000000000000000000003E"),
            felt!("0x0000000000000000000000000000000000000000000000001104800180018000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000216"),
            felt!("0x000000000000000000000000000000000000000000000000482480017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000215"),
            felt!("0x000000000000000000000000000000000000000000000000480080007FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000A0680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000009"),
            felt!("0x0000000000000000000000000000000000000000000000004824800180007FD4"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000000"),
            felt!("0x000000000000000000000000000000000000000000000000482480017FFF8000"),
            felt!("0x0000000000000000000000000000000100000000000000000000000000000000"),
            felt!("0x000000000000000000000000000000000000000000000000400080007FE37FFF"),
            felt!("0x000000000000000000000000000000000000000000000000010780017FFF7FFF"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000021"),
            felt!("0x0000000000000000000000000000000000000000000000004824800180007FD4"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000000"),
            felt!("0x000000000000000000000000000000000000000000000000400080007FE47FFF"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFF7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000480A7FFB7FFF8000"),
            felt!("0x00000000000000000000000000000000000000000000000048127FE17FFF8000"),
            felt!("0x00000000000000000000000000000000000000000000000048127FF17FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000001104800180018000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000175"),
            felt!("0x000000000000000000000000000000000000000000000000482480017FAA8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x000000000000000000000000000000000000000000000000020680017FFF7FFC"),
            felt!("0x000000000000000000000000000000000000000000000000000000000000000C"),
            felt!("0x000000000000000000000000000000000000000000000000040780017FFF7FFF"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFE7FFF8000"),
            felt!("0x00000000000000000000000000000000000000000000000048127FF87FFF8000"),
            felt!("0x00000000000000000000000000000000000000000000000048127FF87FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000000"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFB7FFF8000"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFA7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000208B7FFF7FFF7FFE"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFF7FFF8000"),
            felt!("0x00000000000000000000000000000000000000000000000048127FF97FFF8000"),
            felt!("0x00000000000000000000000000000000000000000000000048127FF97FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x00000000000000000000000000000000000000000000000048127FF97FFF8000"),
            felt!("0x00000000000000000000000000000000000000000000000048127FF97FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000208B7FFF7FFF7FFE"),
            felt!("0x000000000000000000000000000000000000000000000000040780017FFF7FFF"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x000000000000000000000000000000000000000000004F7574206F6620676173"),
            felt!("0x000000000000000000000000000000000000000000000000400080007FFE7FFF"),
            felt!("0x000000000000000000000000000000000000000000000000482480017FE18000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x00000000000000000000000000000000000000000000000048127FCF7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000480A7FFB7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFA7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000482480017FF98000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x000000000000000000000000000000000000000000000000208B7FFF7FFF7FFE"),
            felt!("0x000000000000000000000000000000000000000000000000480A7FFB7FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000001104800180018000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000115"),
            felt!("0x000000000000000000000000000000000000000000000000040780017FFF7FFF"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x00000000496E70757420746F6F206C6F6E6720666F7220617267756D656E7473"),
            felt!("0x000000000000000000000000000000000000000000000000400080007FFE7FFF"),
            felt!("0x00000000000000000000000000000000000000000000000048127FE47FFF8000"),
            felt!("0x00000000000000000000000000000000000000000000000048127FD27FFF8000"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFB7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFA7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000482480017FF98000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x000000000000000000000000000000000000000000000000208B7FFF7FFF7FFE"),
            felt!("0x000000000000000000000000000000000000000000000000040780017FFF7FFF"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x000000496E70757420746F6F2073686F727420666F7220617267756D656E7473"),
            felt!("0x000000000000000000000000000000000000000000000000400080007FFE7FFF"),
            felt!("0x00000000000000000000000000000000000000000000000048127FED7FFF8000"),
            felt!("0x00000000000000000000000000000000000000000000000048127FDB7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000480A7FFB7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFA7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000482480017FF98000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x000000000000000000000000000000000000000000000000208B7FFF7FFF7FFE"),
            felt!("0x000000000000000000000000000000000000000000000000040780017FFF7FFF"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x000000496E70757420746F6F2073686F727420666F7220617267756D656E7473"),
            felt!("0x000000000000000000000000000000000000000000000000400080007FFE7FFF"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFD7FFF8000"),
            felt!("0x00000000000000000000000000000000000000000000000048127FEB7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000480A7FFB7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFA7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000482480017FF98000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x000000000000000000000000000000000000000000000000208B7FFF7FFF7FFE"),
            felt!("0x000000000000000000000000000000000000000000000000040780017FFF7FFF"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x000000000000000000000000000000000000000000004F7574206F6620676173"),
            felt!("0x000000000000000000000000000000000000000000000000400080007FFE7FFF"),
            felt!("0x000000000000000000000000000000000000000000000000482680017FF98000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x000000000000000000000000000000000000000000000000480A7FFA7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000480A7FFB7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFA7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000482480017FF98000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x000000000000000000000000000000000000000000000000208B7FFF7FFF7FFE"),
            felt!("0x0000000000000000000000000000000000000000000000000A0680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000007"),
            felt!("0x000000000000000000000000000000000000000000000000482680017FFA8000"),
            felt!("0x00000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFDB7A"),
            felt!("0x000000000000000000000000000000000000000000000000400280007FF97FFF"),
            felt!("0x000000000000000000000000000000000000000000000000010780017FFF7FFF"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000079"),
            felt!("0x0000000000000000000000000000000000000000000000004825800180007FFA"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000002486"),
            felt!("0x000000000000000000000000000000000000000000000000400280007FF97FFF"),
            felt!("0x000000000000000000000000000000000000000000000000480A7FFC7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000480A7FFD7FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000001104800180018000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000081"),
            felt!("0x000000000000000000000000000000000000000000000000482680017FF98000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x000000000000000000000000000000000000000000000000020680017FFF7FFD"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000060"),
            felt!("0x00000000000000000000000000000000000000000000000048307FFB80007FFC"),
            felt!("0x0000000000000000000000000000000000000000000000004824800180007FFF"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000000"),
            felt!("0x000000000000000000000000000000000000000000000000020680017FFF7FFF"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000004"),
            felt!("0x000000000000000000000000000000000000000000000000010780017FFF7FFF"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000006"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000000"),
            felt!("0x000000000000000000000000000000000000000000000000010780017FFF7FFF"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000004"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x00000000000000000000000000000000000000000000000048307FFE80007FFF"),
            felt!("0x000000000000000000000000000000000000000000000000020680017FFF7FFF"),
            felt!("0x000000000000000000000000000000000000000000000000000000000000003D"),
            felt!("0x0000000000000000000000000000000000000000000000001104800180018000"),
            felt!("0x000000000000000000000000000000000000000000000000000000000000017A"),
            felt!("0x000000000000000000000000000000000000000000000000482480017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000179"),
            felt!("0x000000000000000000000000000000000000000000000000480080007FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000A0680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000009"),
            felt!("0x0000000000000000000000000000000000000000000000004824800180007FE4"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000000"),
            felt!("0x000000000000000000000000000000000000000000000000482480017FFF8000"),
            felt!("0x0000000000000000000000000000000100000000000000000000000000000000"),
            felt!("0x000000000000000000000000000000000000000000000000400080007FF37FFF"),
            felt!("0x000000000000000000000000000000000000000000000000010780017FFF7FFF"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000020"),
            felt!("0x0000000000000000000000000000000000000000000000004824800180007FE4"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000000"),
            felt!("0x000000000000000000000000000000000000000000000000400080007FF47FFF"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFF7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000480A7FFB7FFF8000"),
            felt!("0x00000000000000000000000000000000000000000000000048127FF17FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000001104800180018000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000100"),
            felt!("0x000000000000000000000000000000000000000000000000482480017FD28000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x000000000000000000000000000000000000000000000000020680017FFF7FFC"),
            felt!("0x000000000000000000000000000000000000000000000000000000000000000C"),
            felt!("0x000000000000000000000000000000000000000000000000040780017FFF7FFF"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFE7FFF8000"),
            felt!("0x00000000000000000000000000000000000000000000000048127FF87FFF8000"),
            felt!("0x00000000000000000000000000000000000000000000000048127FF87FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000000"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFB7FFF8000"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFA7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000208B7FFF7FFF7FFE"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFF7FFF8000"),
            felt!("0x00000000000000000000000000000000000000000000000048127FF97FFF8000"),
            felt!("0x00000000000000000000000000000000000000000000000048127FF97FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x00000000000000000000000000000000000000000000000048127FF97FFF8000"),
            felt!("0x00000000000000000000000000000000000000000000000048127FF97FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000208B7FFF7FFF7FFE"),
            felt!("0x000000000000000000000000000000000000000000000000040780017FFF7FFF"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x000000000000000000000000000000000000000000004F7574206F6620676173"),
            felt!("0x000000000000000000000000000000000000000000000000400080007FFE7FFF"),
            felt!("0x000000000000000000000000000000000000000000000000482480017FF18000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x00000000000000000000000000000000000000000000000048127FDF7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000480A7FFB7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFA7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000482480017FF98000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x000000000000000000000000000000000000000000000000208B7FFF7FFF7FFE"),
            felt!("0x000000000000000000000000000000000000000000000000480A7FFB7FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000001104800180018000"),
            felt!("0x000000000000000000000000000000000000000000000000000000000000007A"),
            felt!("0x000000000000000000000000000000000000000000000000040780017FFF7FFF"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x00000000496E70757420746F6F206C6F6E6720666F7220617267756D656E7473"),
            felt!("0x000000000000000000000000000000000000000000000000400080007FFE7FFF"),
            felt!("0x00000000000000000000000000000000000000000000000048127FF47FFF8000"),
            felt!("0x00000000000000000000000000000000000000000000000048127FE27FFF8000"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFB7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFA7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000482480017FF98000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x000000000000000000000000000000000000000000000000208B7FFF7FFF7FFE"),
            felt!("0x000000000000000000000000000000000000000000000000040780017FFF7FFF"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x000000496E70757420746F6F2073686F727420666F7220617267756D656E7473"),
            felt!("0x000000000000000000000000000000000000000000000000400080007FFE7FFF"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFD7FFF8000"),
            felt!("0x00000000000000000000000000000000000000000000000048127FEB7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000480A7FFB7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFA7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000482480017FF98000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x000000000000000000000000000000000000000000000000208B7FFF7FFF7FFE"),
            felt!("0x000000000000000000000000000000000000000000000000040780017FFF7FFF"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x000000000000000000000000000000000000000000004F7574206F6620676173"),
            felt!("0x000000000000000000000000000000000000000000000000400080007FFE7FFF"),
            felt!("0x000000000000000000000000000000000000000000000000482680017FF98000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x000000000000000000000000000000000000000000000000480A7FFA7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000480A7FFB7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFA7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000482480017FF98000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x000000000000000000000000000000000000000000000000208B7FFF7FFF7FFE"),
            felt!("0x00000000000000000000000000000000000000000000000048297FFC80007FFD"),
            felt!("0x000000000000000000000000000000000000000000000000020680017FFF7FFF"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000004"),
            felt!("0x000000000000000000000000000000000000000000000000010780017FFF7FFF"),
            felt!("0x000000000000000000000000000000000000000000000000000000000000000A"),
            felt!("0x000000000000000000000000000000000000000000000000482680017FFC8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x000000000000000000000000000000000000000000000000480A7FFD7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000000"),
            felt!("0x000000000000000000000000000000000000000000000000480A7FFC7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000010780017FFF7FFF"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000008"),
            felt!("0x000000000000000000000000000000000000000000000000480A7FFC7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000480A7FFD7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000000"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFC7FFF8000"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFC7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000020680017FFF7FFC"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000009"),
            felt!("0x000000000000000000000000000000000000000000000000480080007FFD8000"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFD7FFF8000"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFD7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000000"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFC7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000208B7FFF7FFF7FFE"),
            felt!("0x000000000000000000000000000000000000000000000000040780017FFF7FFF"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFD7FFF8000"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFD7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000000"),
            felt!("0x000000000000000000000000000000000000000000000000208B7FFF7FFF7FFE"),
            felt!("0x000000000000000000000000000000000000000000000000480A7FFB7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000480A7FFC7FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000001104800180018000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000026"),
            felt!("0x000000000000000000000000000000000000000000000000020680017FFF7FFD"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000019"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFB7FFF8000"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFB7FFF8000"),
            felt!("0x00000000000000000000000000000000000000000000000048287FFD7FFD8000"),
            felt!("0x0000000000000000000000000000000000000000000000001104800180018000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000092"),
            felt!("0x000000000000000000000000000000000000000000000000020680017FFF7FFD"),
            felt!("0x000000000000000000000000000000000000000000000000000000000000000B"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFB7FFF8000"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFB7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000000"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000000"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000000"),
            felt!("0x000000000000000000000000000000000000000000000000208B7FFF7FFF7FFE"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFB7FFF8000"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFB7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFB7FFF8000"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFB7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000208B7FFF7FFF7FFE"),
            felt!("0x000000000000000000000000000000000000000000000000040780017FFF7FFF"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000018"),
            felt!("0x00000000000000000000000000000000000000000000000048127FE37FFF8000"),
            felt!("0x00000000000000000000000000000000000000000000000048127FE37FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x00000000000000000000000000000000000000000000000048127FE37FFF8000"),
            felt!("0x00000000000000000000000000000000000000000000000048127FE37FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000208B7FFF7FFF7FFE"),
            felt!("0x000000000000000000000000000000000000000000000000480A7FFD7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000208B7FFF7FFF7FFE"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000000"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0206F38F7E4F15E87567361213C28F235CCCDAA1D7FD34C9DB1DFE9489C6A091"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x00000000000000000000000000000000000000000053746F7261676552656164"),
            felt!("0x000000000000000000000000000000000000000000000000400280007FFD7FFF"),
            felt!("0x000000000000000000000000000000000000000000000000400380017FFD7FFC"),
            felt!("0x000000000000000000000000000000000000000000000000400280027FFD7FFD"),
            felt!("0x000000000000000000000000000000000000000000000000400280037FFD7FFE"),
            felt!("0x000000000000000000000000000000000000000000000000480280057FFD8000"),
            felt!("0x000000000000000000000000000000000000000000000000020680017FFF7FFF"),
            felt!("0x000000000000000000000000000000000000000000000000000000000000000C"),
            felt!("0x000000000000000000000000000000000000000000000000480280047FFD8000"),
            felt!("0x000000000000000000000000000000000000000000000000482680017FFD8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000007"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000000"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000000"),
            felt!("0x000000000000000000000000000000000000000000000000480280067FFD8000"),
            felt!("0x000000000000000000000000000000000000000000000000010780017FFF7FFF"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000009"),
            felt!("0x000000000000000000000000000000000000000000000000480280047FFD8000"),
            felt!("0x000000000000000000000000000000000000000000000000482680017FFD8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000008"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x000000000000000000000000000000000000000000000000480280067FFD8000"),
            felt!("0x000000000000000000000000000000000000000000000000480280077FFD8000"),
            felt!("0x0000000000000000000000000000000000000000000000001104800180018000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000089"),
            felt!("0x000000000000000000000000000000000000000000000000020680017FFF7FFD"),
            felt!("0x000000000000000000000000000000000000000000000000000000000000000A"),
            felt!("0x00000000000000000000000000000000000000000000000048127FF67FFF8000"),
            felt!("0x00000000000000000000000000000000000000000000000048127FF67FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000000"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000000"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFB7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000208B7FFF7FFF7FFE"),
            felt!("0x00000000000000000000000000000000000000000000000048127FF67FFF8000"),
            felt!("0x00000000000000000000000000000000000000000000000048127FF67FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFB7FFF8000"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFB7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000208B7FFF7FFF7FFE"),
            felt!("0x000000000000000000000000000000000000000000000000400380007FFD7FFB"),
            felt!("0x000000000000000000000000000000000000000000000000480A7FFC7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000482680017FFD8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x000000000000000000000000000000000000000000000000208B7FFF7FFF7FFE"),
            felt!("0x000000000000000000000000000000000000000000000000480A7FFA7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000480A7FFB7FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000001104800180018000"),
            felt!("0x0800000000000010FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC9"),
            felt!("0x000000000000000000000000000000000000000000000000020680017FFF7FFD"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000019"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFB7FFF8000"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFB7FFF8000"),
            felt!("0x00000000000000000000000000000000000000000000000048287FFD7FFD8000"),
            felt!("0x0000000000000000000000000000000000000000000000001104800180018000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000034"),
            felt!("0x000000000000000000000000000000000000000000000000020680017FFF7FFD"),
            felt!("0x000000000000000000000000000000000000000000000000000000000000000B"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFB7FFF8000"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFB7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000000"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000000"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000000"),
            felt!("0x000000000000000000000000000000000000000000000000208B7FFF7FFF7FFE"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFB7FFF8000"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFB7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFB7FFF8000"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFB7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000208B7FFF7FFF7FFE"),
            felt!("0x000000000000000000000000000000000000000000000000040780017FFF7FFF"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000018"),
            felt!("0x00000000000000000000000000000000000000000000000048127FE37FFF8000"),
            felt!("0x00000000000000000000000000000000000000000000000048127FE37FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x00000000000000000000000000000000000000000000000048127FE37FFF8000"),
            felt!("0x00000000000000000000000000000000000000000000000048127FE37FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000208B7FFF7FFF7FFE"),
            felt!("0x000000000000000000000000000000000000000000000000480A7FFB7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000480A7FFC7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000480A7FFD7FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000001104800180018000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000014"),
            felt!("0x000000000000000000000000000000000000000000000000020680017FFF7FFD"),
            felt!("0x000000000000000000000000000000000000000000000000000000000000000B"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFB7FFF8000"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFB7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000000"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000000"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000000"),
            felt!("0x000000000000000000000000000000000000000000000000208B7FFF7FFF7FFE"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFB7FFF8000"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFB7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFB7FFF8000"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFB7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000208B7FFF7FFF7FFE"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000000"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0206F38F7E4F15E87567361213C28F235CCCDAA1D7FD34C9DB1DFE9489C6A091"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x000000000000000000000000000000000000000053746F726167655772697465"),
            felt!("0x000000000000000000000000000000000000000000000000400280007FFC7FFF"),
            felt!("0x000000000000000000000000000000000000000000000000400380017FFC7FFB"),
            felt!("0x000000000000000000000000000000000000000000000000400280027FFC7FFD"),
            felt!("0x000000000000000000000000000000000000000000000000400280037FFC7FFE"),
            felt!("0x000000000000000000000000000000000000000000000000400380047FFC7FFD"),
            felt!("0x000000000000000000000000000000000000000000000000480280067FFC8000"),
            felt!("0x000000000000000000000000000000000000000000000000020680017FFF7FFF"),
            felt!("0x000000000000000000000000000000000000000000000000000000000000000D"),
            felt!("0x000000000000000000000000000000000000000000000000480280057FFC8000"),
            felt!("0x000000000000000000000000000000000000000000000000482680017FFC8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000007"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000000"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000000"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000000"),
            felt!("0x000000000000000000000000000000000000000000000000010780017FFF7FFF"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000009"),
            felt!("0x000000000000000000000000000000000000000000000000480280057FFC8000"),
            felt!("0x000000000000000000000000000000000000000000000000482680017FFC8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000009"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x000000000000000000000000000000000000000000000000480280077FFC8000"),
            felt!("0x000000000000000000000000000000000000000000000000480280087FFC8000"),
            felt!("0x0000000000000000000000000000000000000000000000001104800180018000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000021"),
            felt!("0x000000000000000000000000000000000000000000000000020680017FFF7FFD"),
            felt!("0x000000000000000000000000000000000000000000000000000000000000000B"),
            felt!("0x00000000000000000000000000000000000000000000000048127FF67FFF8000"),
            felt!("0x00000000000000000000000000000000000000000000000048127FF67FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000000"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000000"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000000"),
            felt!("0x000000000000000000000000000000000000000000000000208B7FFF7FFF7FFE"),
            felt!("0x00000000000000000000000000000000000000000000000048127FF67FFF8000"),
            felt!("0x00000000000000000000000000000000000000000000000048127FF67FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFB7FFF8000"),
            felt!("0x00000000000000000000000000000000000000000000000048127FFB7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000208B7FFF7FFF7FFE"),
            felt!("0x000000000000000000000000000000000000000000000000020780017FFF7FFB"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000008"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000000"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000000"),
            felt!("0x000000000000000000000000000000000000000000000000480A7FFD7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000208B7FFF7FFF7FFE"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x000000000000000000000000000000000000000000000000480A7FFC7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000480A7FFD7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000208B7FFF7FFF7FFE"),
            felt!("0x000000000000000000000000000000000000000000000000020780017FFF7FFB"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000009"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000000"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000000"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000000"),
            felt!("0x000000000000000000000000000000000000000000000000208B7FFF7FFF7FFE"),
            felt!("0x000000000000000000000000000000000000000000000000480680017FFF8000"),
            felt!("0x0000000000000000000000000000000000000000000000000000000000000001"),
            felt!("0x000000000000000000000000000000000000000000000000480A7FFC7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000480A7FFD7FFF8000"),
            felt!("0x000000000000000000000000000000000000000000000000208B7FFF7FFF7FFE"),
        ];

        // Expected compiler version
        let compiler_version = "1.1.0".to_string();

        // Expected prime
        let prime: BigUintAsHex = serde_json::from_str(
            "\"0x800000000000011000000000000000000000000000000000000000000000001\"",
        )
        .unwrap();

        // Expected hints
        let hints = json!([
            [
                0,
                [
                    {
                        "TestLessThanOrEqual": {
                            "dst": {
                                "offset": 0,
                                "register": "AP"
                            },
                            "lhs": {
                                "Immediate": "0x5816"
                            },
                            "rhs": {
                                "Deref": {
                                    "offset": -6,
                                    "register": "FP"
                                }
                            }
                        }
                    }
                ]
            ],
            [
                41,
                [
                    {
                        "TestLessThanOrEqual": {
                            "dst": {
                                "offset": 0,
                                "register": "AP"
                            },
                            "lhs": {
                                "Immediate": "0x0"
                            },
                            "rhs": {
                                "Deref": {
                                    "offset": -27,
                                    "register": "AP"
                                }
                            }
                        }
                    }
                ]
            ],
            [
                62,
                [
                    {
                        "AllocSegment": {
                            "dst": {
                                "offset": 0,
                                "register": "AP"
                            }
                        }
                    }
                ]
            ],
            [
                80,
                [
                    {
                        "AllocSegment": {
                            "dst": {
                                "offset": 0,
                                "register": "AP"
                            }
                        }
                    }
                ]
            ],
            [
                98,
                [
                    {
                        "AllocSegment": {
                            "dst": {
                                "offset": 0,
                                "register": "AP"
                            }
                        }
                    }
                ]
            ],
            [
                112,
                [
                    {
                        "AllocSegment": {
                            "dst": {
                                "offset": 0,
                                "register": "AP"
                            }
                        }
                    }
                ]
            ],
            [
                126,
                [
                    {
                        "AllocSegment": {
                            "dst": {
                                "offset": 0,
                                "register": "AP"
                            }
                        }
                    }
                ]
            ],
            [
                141,
                [
                    {
                        "TestLessThanOrEqual": {
                            "dst": {
                                "offset": 0,
                                "register": "AP"
                            },
                            "lhs": {
                                "Immediate": "0x1ab8"
                            },
                            "rhs": {
                                "Deref": {
                                    "offset": -6,
                                    "register": "FP"
                                }
                            }
                        }
                    }
                ]
            ],
            [
                176,
                [
                    {
                        "TestLessThanOrEqual": {
                            "dst": {
                                "offset": 0,
                                "register": "AP"
                            },
                            "lhs": {
                                "Immediate": "0x0"
                            },
                            "rhs": {
                                "Deref": {
                                    "offset": -11,
                                    "register": "AP"
                                }
                            }
                        }
                    }
                ]
            ],
            [
                196,
                [
                    {
                        "AllocSegment": {
                            "dst": {
                                "offset": 0,
                                "register": "AP"
                            }
                        }
                    }
                ]
            ],
            [
                219,
                [
                    {
                        "AllocSegment": {
                            "dst": {
                                "offset": 0,
                                "register": "AP"
                            }
                        }
                    }
                ]
            ],
            [
                237,
                [
                    {
                        "AllocSegment": {
                            "dst": {
                                "offset": 0,
                                "register": "AP"
                            }
                        }
                    }
                ]
            ],
            [
                251,
                [
                    {
                        "AllocSegment": {
                            "dst": {
                                "offset": 0,
                                "register": "AP"
                            }
                        }
                    }
                ]
            ],
            [
                266,
                [
                    {
                        "TestLessThanOrEqual": {
                            "dst": {
                                "offset": 0,
                                "register": "AP"
                            },
                            "lhs": {
                                "Immediate": "0x6054"
                            },
                            "rhs": {
                                "Deref": {
                                    "offset": -6,
                                    "register": "FP"
                                }
                            }
                        }
                    }
                ]
            ],
            [
                313,
                [
                    {
                        "TestLessThanOrEqual": {
                            "dst": {
                                "offset": 0,
                                "register": "AP"
                            },
                            "lhs": {
                                "Immediate": "0x0"
                            },
                            "rhs": {
                                "Deref": {
                                    "offset": -43,
                                    "register": "AP"
                                }
                            }
                        }
                    }
                ]
            ],
            [
                335,
                [
                    {
                        "AllocSegment": {
                            "dst": {
                                "offset": 0,
                                "register": "AP"
                            }
                        }
                    }
                ]
            ],
            [
                353,
                [
                    {
                        "AllocSegment": {
                            "dst": {
                                "offset": 0,
                                "register": "AP"
                            }
                        }
                    }
                ]
            ],
            [
                371,
                [
                    {
                        "AllocSegment": {
                            "dst": {
                                "offset": 0,
                                "register": "AP"
                            }
                        }
                    }
                ]
            ],
            [
                385,
                [
                    {
                        "AllocSegment": {
                            "dst": {
                                "offset": 0,
                                "register": "AP"
                            }
                        }
                    }
                ]
            ],
            [
                399,
                [
                    {
                        "AllocSegment": {
                            "dst": {
                                "offset": 0,
                                "register": "AP"
                            }
                        }
                    }
                ]
            ],
            [
                413,
                [
                    {
                        "AllocSegment": {
                            "dst": {
                                "offset": 0,
                                "register": "AP"
                            }
                        }
                    }
                ]
            ],
            [
                428,
                [
                    {
                        "TestLessThanOrEqual": {
                            "dst": {
                                "offset": 0,
                                "register": "AP"
                            },
                            "lhs": {
                                "Immediate": "0x2486"
                            },
                            "rhs": {
                                "Deref": {
                                    "offset": -6,
                                    "register": "FP"
                                }
                            }
                        }
                    }
                ]
            ],
            [
                469,
                [
                    {
                        "TestLessThanOrEqual": {
                            "dst": {
                                "offset": 0,
                                "register": "AP"
                            },
                            "lhs": {
                                "Immediate": "0x0"
                            },
                            "rhs": {
                                "Deref": {
                                    "offset": -27,
                                    "register": "AP"
                                }
                            }
                        }
                    }
                ]
            ],
            [
                490,
                [
                    {
                        "AllocSegment": {
                            "dst": {
                                "offset": 0,
                                "register": "AP"
                            }
                        }
                    }
                ]
            ],
            [
                508,
                [
                    {
                        "AllocSegment": {
                            "dst": {
                                "offset": 0,
                                "register": "AP"
                            }
                        }
                    }
                ]
            ],
            [
                526,
                [
                    {
                        "AllocSegment": {
                            "dst": {
                                "offset": 0,
                                "register": "AP"
                            }
                        }
                    }
                ]
            ],
            [
                540,
                [
                    {
                        "AllocSegment": {
                            "dst": {
                                "offset": 0,
                                "register": "AP"
                            }
                        }
                    }
                ]
            ],
            [
                554,
                [
                    {
                        "AllocSegment": {
                            "dst": {
                                "offset": 0,
                                "register": "AP"
                            }
                        }
                    }
                ]
            ],
            [
                658,
                [
                    {
                        "SystemCall": {
                            "system": {
                                "Deref": {
                                    "offset": -3,
                                    "register": "FP"
                                }
                            }
                        }
                    }
                ]
            ],
            [
                774,
                [
                    {
                        "SystemCall": {
                            "system": {
                                "Deref": {
                                    "offset": -4,
                                    "register": "FP"
                                }
                            }
                        }
                    }
                ]
            ]
        ]);

        CasmContractClass {
            entry_points_by_type,
            compiler_version,
            prime,
            hints,
            bytecode,
            bytecode_segment_lengths: None,
        }
    }
}
